/**
 * 
 */
package com.proyecto.histoclin.modelo.servicios;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.Utilidades.UtilConversion;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.constantes.ConstantesHistoriasClinicas;
import com.proyecto.histoclin.modelo.dto.CorrelativosHistoclinId;
import com.proyecto.histoclin.modelo.dto.HistoclinFnlddcausaext;
import com.proyecto.personas.modelo.dto.Personas;

/**
 * @author vico
 *
 */
public class ServicioHistoclinFnlddcausaext extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosHistoclin servicioCorrelativosHistoclin;

	public ServicioHistoclinFnlddcausaext() {
		// TODO Auto-generated constructor stub
	}

	
	
	
	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		

		HistoclinFnlddcausaext objHistoclinFnlddcausaext = (HistoclinFnlddcausaext)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objHistoclinFnlddcausaext);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosHistoclin.obtenerProximoNumeroComoString(
					new CorrelativosHistoclinId (objHistoclinFnlddcausaext.getId().getCiaopr(), "HC_FNLDDCAUSAEXT","hcfnlddcausaextcod" ) ,true);

			objHistoclinFnlddcausaext.getId().setHcfnlddcausaextcod(Integer.parseInt(proxNumero) );

	
			super.incluir(objHistoclinFnlddcausaext, iniciaTransaccion);

		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoclinFnlddcausaext::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoclinFnlddcausaext.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}


	public void crearFinalidadCausaexterna(
				String ciaopr, Integer hisclicod, 
				Integer nropersona, String hisclitipocod,
				Personas persona
				){
		
		HistoclinFnlddcausaext objHistoclinFnlddcausaext = new HistoclinFnlddcausaext();
		objHistoclinFnlddcausaext.getId().setCiaopr(ciaopr);
		objHistoclinFnlddcausaext.getId().setHisclicod(hisclicod);
		objHistoclinFnlddcausaext.setNropersona(nropersona);
		objHistoclinFnlddcausaext.setPersonas(persona);
		
		if( hisclitipocod.equals(ConstantesHistoriasClinicas.HISCLITIPOCOD_CONSULTAEXTERNA) ||
				hisclitipocod.equals(ConstantesHistoriasClinicas.HISCLITIPOCOD_URGENCIAS) ||
				hisclitipocod.equals(ConstantesHistoriasClinicas.HISCLITIPOCOD_ODONTOLOGICA)
				){

			//finalidad
			objHistoclinFnlddcausaext.setFcAtcplafim(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcAtcparto(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcAtcrecinaci(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltcredemen10a(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltaguvisual(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltadul(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltdesjov(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltembarazo(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetenfprof(UtilConversion.VALOR_FALSO);			
			objHistoclinFnlddcausaext.setFcNoaplica(UtilConversion.VALOR_CIERTO);
			
			//causa externa
			objHistoclinFnlddcausaext.setCeAcctransito(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeAccofidico(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeAccrabico(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeAcctrabajo(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeEnfegeneral(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeEnfeprofesional(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeEventcatastrofi(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeLesagreasion(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeLesautoinfligida(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeLesautoinfligida(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeOtrotipacc(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospeabussex(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospeviolsex(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospmaltraemoc(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospmalfis(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeOtra(UtilConversion.VALOR_FALSO);		//inhabilitar este campo en cp
			
			
		}else if( hisclitipocod.equals(ConstantesHistoriasClinicas.HISCLITIPOCOD_PYP) 
				){
			
			//finalidad
			objHistoclinFnlddcausaext.setFcAtcplafim(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcAtcparto(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcAtcrecinaci(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltcredemen10a(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltaguvisual(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltadul(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltdesjov(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetaltembarazo(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcDetenfprof(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setFcNoaplica(UtilConversion.VALOR_FALSO);	//inhabilitar este campo en cp
			

			//causa externa
			objHistoclinFnlddcausaext.setCeAcctransito(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeAccofidico(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeAccrabico(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeAcctrabajo(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeEnfegeneral(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeEnfeprofesional(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeEventcatastrofi(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeLesagreasion(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeLesautoinfligida(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeLesautoinfligida(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeOtrotipacc(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospeabussex(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospeviolsex(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospmaltraemoc(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeSospmalfis(UtilConversion.VALOR_FALSO);
			objHistoclinFnlddcausaext.setCeOtra(UtilConversion.VALOR_CIERTO);
		}
		
		try {
			this.incluir(objHistoclinFnlddcausaext, true);	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("objHistoclinFnlddcausaext.incluir:: " + e.getMessage());
		}
		
		/*
		objHistoclinFnlddcausaext.setFcAtcplafim(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcAtcparto(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcAtcrecinaci(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcDetaltcredemen10a(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcDetaltaguvisual(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcDetaltadul(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcDetaltdesjov(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcDetaltembarazo(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcDetenfprof(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setFcNoaplica(UtilConversion.VALOR_FALSO);
		
		objHistoclinFnlddcausaext.setCeAcctransito(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeAccofidico(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeAccrabico(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeAcctrabajo(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeEnfegeneral(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeEnfeprofesional(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeEventcatastrofi(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeLesagreasion(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeLesautoinfligida(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeLesautoinfligida(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeOtrotipacc(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeSospeabussex(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeSospeviolsex(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeSospmaltraemoc(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeSospmalfis(UtilConversion.VALOR_FALSO);
		objHistoclinFnlddcausaext.setCeOtra(UtilConversion.VALOR_FALSO);
		*/
	}

	public ServicioCorrelativosHistoclin getServicioCorrelativosHistoclin() {
		return servicioCorrelativosHistoclin;
	}

	public void setServicioCorrelativosHistoclin(
			ServicioCorrelativosHistoclin servicioCorrelativosHistoclin) {
		this.servicioCorrelativosHistoclin = servicioCorrelativosHistoclin;
	}

}
